package cn.itcast.wanxinp2p.consumer.service.impl;


import cn.itcast.wanxinp2p.account.model.account.AccountRegisterDTO;
import cn.itcast.wanxinp2p.common.domain.CodePrefixCode;
import cn.itcast.wanxinp2p.common.domain.RestResponse;
import cn.itcast.wanxinp2p.common.exception.BusinessException;
import cn.itcast.wanxinp2p.common.exception.ConsumerErrorCode;
import cn.itcast.wanxinp2p.common.util.CodeNoUtil;
import cn.itcast.wanxinp2p.consumer.agent.AccountApiAgent;
import cn.itcast.wanxinp2p.consumer.entity.Consumer;
import cn.itcast.wanxinp2p.consumer.mapper.ConsumerMapper;
import cn.itcast.wanxinp2p.consumer.model.comsumer.ConsumerRegisterDTO;
import cn.itcast.wanxinp2p.consumer.service.ConsumerService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @email 1572178030@qq.com
 * @author:黄海宾
 * @date: 2023/3/30  22:20
 */
@Service
public class ConsumerServiceImpl implements ConsumerService {
    @Autowired
    private ConsumerMapper consumerMapper;

    @Autowired
    private AccountApiAgent accountApiAgent;

    @Override
    public Integer checkMobile(String mobile) {
        //根据手机号查询用户，存在返回1 不存在返回0
        int count = consumerMapper.getByPhone(mobile);
        return count > 0 ? 1 : 0;
    }

    @Override
    public void register(ConsumerRegisterDTO consumerRegisterDTO) {
        //1、检测是否已注册，如果已经注册，则抛出 ConsumerErrorCode.E_140107 异常
        Integer count = checkMobile(consumerRegisterDTO.getMobile());
        if (count>0){
            throw new BusinessException(ConsumerErrorCode.E_140107);
        }
        //2、如果用户没有注册，则保存该用户数据 到 consumer 表中
        Consumer consumer = new Consumer();
        BeanUtils.copyProperties(consumerRegisterDTO,consumer);
        consumer.setUsername(CodeNoUtil.getNo(CodePrefixCode.CODE_NO_PREFIX));
        consumer.setUserNo(CodeNoUtil.getNo(CodePrefixCode.CODE_REQUEST_PREFIX));
        consumerMapper.insertConsumer(consumer);
        //3、并通过Feign远程调用 统一账号服务 实现 账号的保存

        AccountRegisterDTO accountRegisterDTO = new AccountRegisterDTO();
        BeanUtils.copyProperties(consumerRegisterDTO,accountRegisterDTO);
        accountApiAgent.register(accountRegisterDTO);

    }
}